package com.powernode.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.powernode.domain.Order;
import com.powernode.model.ChangeStock;
import com.powernode.model.OrderConfirmParam;
import com.powernode.vo.OrderStatusCount;
import com.powernode.vo.OrderVo;

public interface OrderService extends IService<Order>{

    /**
     * 多条件分页查询订单详情
     * @param page
     * @param order
     * @return
     */
    Page<Order> queryOrderDetailPage(Page<Order> page, Order order);

    /**
     * 根据订单编号查询订单详情
     * @param orderNumber
     * @return
     */
    Order queryOrderDetailByOrderNumber(Long orderNumber);

    ////////////////////////////////// 微信 小程序 ///////////////////////////////

    /**
     * 查询订单信息
     * @param orderNumber
     * @return
     */
    Order getByOrderNumber(String orderNumber);

    /**
     * 查询用户订单状态数量对象
     * @param openId
     * @return
     */
    OrderStatusCount queryUserOrderStatusCount(String openId);

    /**
     * 分页查询用户订单列表
     * @param page
     * @param status
     * @return
     */
    Page<Order> queryMemberOrderPageByStatus(Page<Order> page, Integer status);

    /**
     * 根据订单编号查询会员订单详情
     * @param orderNumber
     * @return
     */
    Order queryMemberOrderDetailByOrderNumber(String orderNumber);

    /**
     * 会员取消订单
     * @param orderNumber
     * @return
     */
    Boolean cancelMemberOrderByOrderNumber(String orderNumber);

    /**
     * 根据订单编号删除订单记录
     * @param orderNumber
     * @return
     */
    Boolean removeOrderByOrderNumber(String orderNumber);

    /**
     * 会员确认收货
     * @param orderNumber
     * @return
     */
    Boolean receiptMemberOrder(String orderNumber);

    /**
     * 查询会员订单确认页面数据
     * @param orderConfirmParam
     * @return
     */
    OrderVo queryMemberOrderVo(OrderConfirmParam orderConfirmParam);

    /**
     * 会员提交订单
     * @param orderVo
     * @return
     */
    String submitMemberOrder(OrderVo orderVo);

    /**
     * 超时未支付：订单回滚
     * @param order
     * @param changeStock
     */
    void orderRollBack(Order order, ChangeStock changeStock);

}
